package br.com.rcbsystens.promotora.model.entidades.pessoa;

import java.io.Serializable;
import java.util.Calendar;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.rcbsystens.promotora.model.entidades.LocalTrabalho;
import br.com.rcbsystens.promotora.model.entidades.RegistroGeral;
import br.com.rcbsystens.promotora.model.imutaveis.EstadoCivil;
import br.com.rcbsystens.promotora.model.imutaveis.Estados;
import br.com.rcbsystens.promotora.model.imutaveis.Nacionalidade;

@Entity
@PrimaryKeyJoinColumn(name="id")
public class PessoaFisica extends Pessoa implements Serializable{
	private static final long serialVersionUID = 1986789606314828120L;
	
	@Column(unique = true, length=14) // 999.999.999-99
	private String cpf;
	@Column(length=160)
	private String nome;
	@Temporal(TemporalType.DATE)
	private Calendar dataNascimento;
	@Enumerated(EnumType.STRING)
	@Column(length=15)
	private EstadoCivil estadoCivil;
	@ElementCollection
	private List<RegistroGeral> registroGeral;
	@Enumerated(EnumType.STRING)
	@Column(length=11) 
	private Nacionalidade nacionalidade; 
	@Column(length=60)
	private String naturalidade;
	@Enumerated(EnumType.STRING)
	@Column(length=25)
	private Estados estado;
	@Column(length=160)
	private String pai;
	@Column(length=160)
	private String mae;
	@ElementCollection
	private List<LocalTrabalho> locaisTrabalhos;
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
	}
	public void setEstadoCivil(EstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}
	public List<RegistroGeral> getRegistroGeral() {
		return registroGeral;
	}
	public void setRegistroGeral(List<RegistroGeral> registroGeral) {
		this.registroGeral = registroGeral;
	}
	public Nacionalidade getNacionalidade() {
		return nacionalidade;
	}
	public void setNacionalidade(Nacionalidade nacionalidade) {
		this.nacionalidade = nacionalidade;
	}
	public String getNaturalidade() {
		return naturalidade;
	}
	public void setNaturalidade(String naturalidade) {
		this.naturalidade = naturalidade;
	}
	public Estados getEstado() {
		return estado;
	}
	public void setEstado(Estados estado) {
		this.estado = estado;
	}
	public String getPai() {
		return pai;
	}
	public void setPai(String pai) {
		this.pai = pai;
	}
	public String getMae() {
		return mae;
	}
	public void setMae(String mae) {
		this.mae = mae;
	}
	public List<LocalTrabalho> getLocaisTrabalhos() {
		return locaisTrabalhos;
	}
	public void setLocaisTrabalhos(List<LocalTrabalho> locaisTrabalhos) {
		this.locaisTrabalhos = locaisTrabalhos;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((cpf == null) ? 0 : cpf.hashCode());
		result = prime * result
				+ ((dataNascimento == null) ? 0 : dataNascimento.hashCode());
		result = prime * result + ((estado == null) ? 0 : estado.hashCode());
		result = prime * result
				+ ((estadoCivil == null) ? 0 : estadoCivil.hashCode());
		result = prime * result
				+ ((locaisTrabalhos == null) ? 0 : locaisTrabalhos.hashCode());
		result = prime * result + ((mae == null) ? 0 : mae.hashCode());
		result = prime * result
				+ ((nacionalidade == null) ? 0 : nacionalidade.hashCode());
		result = prime * result
				+ ((naturalidade == null) ? 0 : naturalidade.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + ((pai == null) ? 0 : pai.hashCode());
		result = prime * result
				+ ((registroGeral == null) ? 0 : registroGeral.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		PessoaFisica other = (PessoaFisica) obj;
		if (cpf == null) {
			if (other.cpf != null)
				return false;
		} else if (!cpf.equals(other.cpf))
			return false;
		if (dataNascimento == null) {
			if (other.dataNascimento != null)
				return false;
		} else if (!dataNascimento.equals(other.dataNascimento))
			return false;
		if (estado != other.estado)
			return false;
		if (estadoCivil != other.estadoCivil)
			return false;
		if (locaisTrabalhos == null) {
			if (other.locaisTrabalhos != null)
				return false;
		} else if (!locaisTrabalhos.equals(other.locaisTrabalhos))
			return false;
		if (mae == null) {
			if (other.mae != null)
				return false;
		} else if (!mae.equals(other.mae))
			return false;
		if (nacionalidade != other.nacionalidade)
			return false;
		if (naturalidade == null) {
			if (other.naturalidade != null)
				return false;
		} else if (!naturalidade.equals(other.naturalidade))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (pai == null) {
			if (other.pai != null)
				return false;
		} else if (!pai.equals(other.pai))
			return false;
		if (registroGeral == null) {
			if (other.registroGeral != null)
				return false;
		} else if (!registroGeral.equals(other.registroGeral))
			return false;
		return true;
	}
	
		
}
